// 给定一个整数数组 asteroids，表示在同一行的小行星。

// 对于数组中的每一个元素，其绝对值表示小行星的大小，正负表示小行星的移动方向（正表示向右移动，负表示向左移动）。每一颗小行星以相同的速度移动。

// 找出碰撞后剩下的所有小行星。碰撞规则：两个小行星相互碰撞，较小的小行星会爆炸。如果两颗小行星大小相同，则两颗小行星都会爆炸。两颗移动方向相同的小行星，永远不会发生碰撞。

// 示例 1：

// 输入：asteroids = [5, 10, -5]
// 输出：[5, 10]
// 解释：10 和 - 5 碰撞后只剩下 10 。 5 和 10 永远不会发生碰撞。
// 示例 2：

// 输入：asteroids = [8, -8]
// 输出：[]
// 解释：8 和 - 8 碰撞后，两者都发生爆炸。


/**
 * @param {number[]} asteroids
 * @return {number[]}
 */
var asteroidCollision = function (asteroids) {
    const st = [];

    for (const aster of asteroids) {
        let alive = true;
        // 会碰撞的情况
        while (alive && st.length > 0 && st[st.length - 1] > 0 && aster < 0) {
            alive = Math.abs(st[st.length - 1]) < Math.abs(aster);
            if (Math.abs(st[st.length - 1]) <= Math.abs(aster)) {
                st.pop(); // 栈顶爆炸
            }
        }
        if (alive)
            st.push(aster);
    }
    return st;

};

const asteroids = [3, -69, -65, 67, -76, 34, 10, 96, 55, 77, 85, 56, 99, -1, 6, -37, -7, -70, 75, -60, 4, -73, 35, -32, 3, -7, 72, 83, -82, 70, 68, 63, 33, -68, -100, 61, -96, 27, 89, 81, -11, -63, 69, 49, -34, 23, 87, 23, 26, -67, 67, -100, -84, -89, -76, -42, -86, -96, 86, 7, 25, 9, -17, 7, -15, -35, -65, -82, -32, 90, -27, 39, 30, -42, -3, -71, -46, 24, 20, -84, 8, 51, -84, 24, 53, 66, 87, -64, 27, -5, -68, 86, -49, -53, 68, 21, -88, 58, 21, -18];
const ans = asteroidCollision(asteroids);
console.log(ans);